草庐IT

Android RelativeLayout 对齐关注

全部标签

c++ - 使用 std::aligned_storage 过度对齐的类型

C++标准声明,关于std::aligned_storage模板,Alignshallbeequaltoalignof(T)forsometypeTortodefault-alignment.那是不是说程序中一定有这样的类型,或者说一定是可以做出这样的类型?特别是possibleimplementation建议在cppreference上是templatestructaligned_storage{typedefstruct{alignas(Align)unsignedchardata[Len];}type;};如果可能的话(也就是说,如果Align是有效的对齐方式),这似乎使具有该对

c++ - 对象地址是否保证是其类型对齐的倍数?

对齐方式已定义intheStandard如下:Analignmentisanimplementation-definedintegervaluerepresentingthenumberofbytesbetweensuccessiveaddressesatwhichagivenobjectcanbeallocated.然而,这并不意味着这些地址是对齐值的倍数。例如,地址为0x01和0x09的两个double对象满足上述定义。是否以某种方式保证对象的地址是其类型对齐值的倍数? 最佳答案 不,不是。只能保证线性关系,不比例关系是有保证的

c++ - 如何以独立于平台的方式设置对齐方式?

在latestdraftofthec++11standard,第3.11章讲到对齐。稍后,第7.6.1章定义了如何定义对齐结构(或变量?)如果我定义这样的结构:alignas(16)structA{intn;unsignedchar[1020];};这是否意味着A类的所有实例都将对齐到16字节?或者,我必须像在下一个代码中那样做吗?structA{chardata[300];};alignas(16)Aa;如果两个例子都是错误的,如何正确地做?PS我不是在寻找依赖于编译器的解决方案。 最佳答案 对齐首先是类型的属性。可以用align

c++ - 具有对齐成员的对象的动态分配 - 可能的解决方案?

我正在考虑使用SSE来加速我项目中的一些代码。这通常需要对我正在处理的数据进行16字节对齐。对于静态分配,我想__declspec(align(16))可以解决问题,但我的问题是:在进行动态分配时确保情况如此的最佳方法是什么?特别是在分配的对象不直接要求对齐但使用具有对齐要求的对象作为成员的情况下(因此更容易忘记确保它正确对齐)。我想出了以下解决方案:始终假设任何潜在的非静态分配数据都是未对齐的,并使用未对齐的加载指令。从我读到的内容来看,这很慢,在这种情况下可能根本不值得为SSE操心。我可以实现它并测试它的性能,但我宁愿在投入大量工作之前询问更好的解决方案,只是为了发现它不值得或有其

c++ - QT5 左对齐 OSX QTabWidget

QT5中的QTabWidget有问题。基本上我有一个主要内容区域是QTabWidget的应用程序。在Ubuntu和Windows上,选项卡向左对齐。然而,在OSX上,选项卡从选项卡小部件的中心开始。我尝试使用以下内容更改对齐方式:QTabWidget{alignment:left;}还有QTabWidget:tab-bar{alignment:left}QTabBar{alignment:left;}是否有可能在QT5的OSX上获得左对齐的标签? 最佳答案 供来自Google的任何人引用QTabWidget::tab-bar{lef

c++ - 根据标记点对齐 2 张人脸图像

我正在使用opencv和C++。我有2张面部图像,其中包含标记点。我已经找到了标记点的坐标。现在我需要根据这些坐标对齐这两张人脸图像。这两张图片可能不一定高度相同,这就是为什么我不知道如何开始对齐它们,应该做什么等等。 最佳答案 在您的情况下,您不能应用基于单应性的对齐程序。为什么不?因为它不适合这个用例。它旨在对齐平面。具有不同位置和深度标记的面(3D对象)显然不是平面。相反,您可以:尝试匹配图像之间的标记,然后插入其他像素的位移场。经典的做法包括movingleastsquares插值或RBF的;否则,一种更“面部处理”的方法是

c++ - 对宽寄存器(特别是 Xeon Phi)进行未对齐数据访问的矢量化/优化循环

这是我第一次向Stackoverflow社区提问。抱歉,如果我的问题不适合论坛的风格/大小-会随着经验的增加而改进。我正在尝试使用英特尔编译器14.0.1对C++中的循环进行矢量化,以更好地利用宽512位寄存器在英特尔至强融核上进行速度优化。(受https://software.intel.com/en-us/articles/data-alignment-to-assist-vectorization启发)和谷歌上的大量引用资料表明,数据对齐在XeonPhi上比在现代Xeon处理器上重要得多,在现代Xeon处理器上它仍然很重要(其中一个在第18页的漂亮概述https://indico

c++ - 标准中哪里说 `new` 返回的每个分配都与 `std::max_align_t` 对齐?

Inthisvideo,在大约6.39处,演示者似乎在说new总是返回与std::max_align_t对齐的内存,这是有道理的,因为operatornew对分配的变量类型一无所知。也就是说,编译器必须选择最严格的对齐方式。但我在标准中找不到这个。演示者还说,当new用于分配char或unsignedchar数组时,此规则不适用。在这种情况下,对齐取决于大小。但这对我来说也不清楚。 最佳答案 这是在[basic.stc.dynamic.allocation]/2中:Theallocationfunctionattemptstoall

c++ - 结构对齐和类型重新解释

假设我有两种类型A和B。然后我做这个类型structPair{Aa;Bb;};现在我有这样的功能。voidfunction(Pair&pair);并假设function只会使用该对的a部分。那么这样使用调用函数是不是未定义行为?Aa;function(reinterpret_cast(a));我知道编译器可能会在成员之后插入填充字节,但它也可以在第一个成员之前插入吗? 最佳答案 我认为这是定义的行为,假设Pair是标准布局。否则,它是未定义的行为。首先,一个标准的布局类和它的第一个成员共享一个地址。[basic.compound]中

c++ - 读/写部分分配的对齐内存

很多关于访问未分配内存的问题,这显然是未定义的行为。但是下面的极端情况呢。考虑以下结构,它对齐到16个字节,但只占用其中的8个字节:structalignas(16)A{floatdata[2];//theremaining8bytesareunallocated};现在我们通过SSE对齐加载/存储内在函数访问16个字节的数据:__m128test_load(constA&a){return_mm_load_ps(a.data);}voidtest_store(A&a,__m128v){_mm_store_ps(a.data,v);}这也是未定义的行为吗?我应该改用填充吗?无论如何,由